//
//  YXStatus.swift
//  微博YX
//
//  Created by apple on 15/11/27.
//  Copyright © 2015年 lyx. All rights reserved.
//

import UIKit

class YXStatus: NSObject {
    
    /// 微博缩略图
    var  pic_urls:[[String: AnyObject]]? {
        didSet{
            if pic_urls?.count == 0{
                return
            }
//             有图片, 获取到对应的图片地址,生成NSURL,赋值给pictureURLs
            
            // 创建 pictureURLs
            storePictureURLs = [NSURL]()
                // 获取字典里面的图片urlString
            for dic in pic_urls! {
                // 创建NSURL
                let urlString =  dic["thumbnail_pic"] as! String
                let url = NSURL(string: urlString)!
                print("图片地址-----------------：\(url)")
                // 添加到 pictureURLs
                storePictureURLs?.append(url)
            }
          }
    }
    
//    存放缩略图的nsurl数组
    var storePictureURLs: [NSURL]?
    
    //  微博缩略图的URL数组(如果是原创微博就返回原创的图片url，如果是转发微博就返回转发的图片)
    var pictureURLs: [NSURL]? {
        return retweeted_status == nil ? storePictureURLs : retweeted_status?.storePictureURLs
    }
    
    
//    被转发的微博
    var retweeted_status: YXStatus?
    
    //    cell的类型（转发微博或者是原创微博）
    func cellId() -> String {
        return retweeted_status == nil ? YXStatusReuseIdentifier.NormalCell.rawValue : YXStatusReuseIdentifier.retweetedCell.rawValue
    }

    
//    行高
    var rowHeiht: CGFloat?
    

    
    /// 用户模型
    var user: YXUser?
    
    /// 微博创建时间
    var created_at: String?
    /// 微博ID
    var id:	Int = 0
    /// 微博信息内容
    var text: String?
    /// 微博来源
    var source: String?
    /// 转发数
    var reposts_count: Int = 0
    /// 评论数
    var comments_count: Int = 0
    /// 表态数
    var attitudes_count: Int = 0
    
    
    /// 字典转模型
    init(dic:[String: AnyObject]){
        super.init()//创建对象
        
        setValuesForKeysWithDictionary(dic)
    }
    
    
//    当给对象赋值的时候会调用这个方法 使用这个setValuesForKeysWithDictionary方法时调用
    override func setValue(value: AnyObject?, forKey key: String) {
//        判断当给user赋值的时候
        if key == "user" {
//            字典转模型,赋值给user属性
            if let dic = value as? [String: AnyObject]{
                user = YXUser(dic: dic)
            }
        //一定要return 不然会被父类从新赋值 会被覆盖
         return
        }
//        如果是转发的微博
        if key == "retweeted_status"{
            if let dic = value as? [String: AnyObject]{
                retweeted_status = YXStatus(dic: dic)
            }
            //一定要return 不然会被父类从新赋值 会被覆盖
            return
        }
//        调用父类的方法
      super.setValue(value, forKey: key)
    }
    
    
    
    
//   当字典转模型时找不到字典中的key时会来调用这个方法
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    
 //    加载微博数据的方法
      class func loadStatus(finished: (result:[YXStatus]?,error: NSError?)->()){
        YXNetworkTool.sharedInstance.loadStatus({ (result, error) -> () in

            if error != nil || result == nil{
                print("error: \(error)")
                finished(result: nil, error: error)
                return
            }
            
            
            //            判断是否有数据
            if let arr = result?["statuses"] as? [[String: AnyObject]] {
//                有数据
//                创建模型数组
                var statuses = [YXStatus]()
                
                for dict in arr{
                    statuses.append(YXStatus(dic: dict))
                }
                finished(result: statuses , error: nil)
                print("获取微博数据成功")
            }else{
                 finished(result: nil, error: nil)
                print("没有值")
            }
            
        })
    
    }
    
//    打印
    override var description: String {
        // 数组存放的是需要打印的属性
        let properties = ["created_at", "id", "text", "source", "pic_urls", "reposts_count", "comments_count", "attitudes_count", "user"]
        
        // 根据传入数组作为字典的key,value会从模型里面自动获取
        // \n 换行 \t table
        return "\n \t 微博模型: \(dictionaryWithValuesForKeys(properties))"
    }
    
}
